#!/usr/bin/python
# -*- coding: utf-8 -*-
from django import forms
from django.contrib.auth.models import User
from django.forms.widgets import *
from modelo.models import *


class RegisterForm(forms.Form):
    usuario = forms.CharField(max_length=30, label= u"Usuario")
    nombreParaJugar = forms.CharField(max_length=30, label=u"Nombre a mostrar")
    email = forms.EmailField(max_length=40, label= u"E-Mail")
    contrasenia = forms.CharField(max_length=30, label= u"Contraseña",
                                  widget=forms.PasswordInput)
    contrasenia2 = forms.CharField(max_length=30,
    label= u"Reingrese contraseña",widget=forms.PasswordInput)
    
    def clean_usuario(self):
        usuario = self.cleaned_data.get("usuario", "")
        if User.objects.filter(username=usuario):
            raise forms.ValidationError(u"Nombre de usuario ya existente")
        return usuario

    def clean_contrasenia2(self):
        contrasenia2 = self.cleaned_data.get('contrasenia2', '')
        if (contrasenia2 !=self.cleaned_data.get('contrasenia', '')):
            raise forms.ValidationError(u"Contraseñas no iguales")
        return contrasenia2


"""Formulario para crear partida"""
class NewGameForm(forms.Form):
    nombrePartida = forms.CharField(max_length=30, label=u"Nombre de la Partida")
    cantidadJugadores = forms.IntegerField(max_value=6, min_value=2, label=u"Cantidad de Jugadores")
    cantidadBots = forms.IntegerField(max_value=5, min_value=0, label=u"Cantidad de Bots")
    mapa = forms.ModelChoiceField(queryset=Mapa.objects.filter(usable=True) , empty_label=None)
    colorEjercitos = forms.ModelChoiceField(label=u"Color de los ejércitos", required=True, queryset=Color.objects.all() , empty_label=None) 

    def clean_cantidadBots(self):
        cantidadBots = self.cleaned_data.get("cantidadBots", "")
        cantJugadores = self.cleaned_data.get("cantidadJugadores", "")
        if cantidadBots >= cantJugadores: ###############  mayor... no mayor o igual
            raise forms.ValidationError("Demasiados bots")
        return cantidadBots


"""Formulario para elegir un mapa para editar"""
class EditMapForm(forms.Form):
    mapa = forms.ModelChoiceField(queryset=Mapa.objects.all())
    mapa.widget.attrs["onchange"]="change_preview(this)"

"""Formulario para elegir imagen en la creación de un mapa"""
class NewMapImageForm(forms.Form):
    imagen = forms.ImageField()
    nombreMapa = forms.CharField(max_length=30, label=u"Nombre del mapa")

    def clean_nombreMapa(self):
        nombreMapa = self.cleaned_data.get("nombreMapa", "")
        if Mapa.objects.filter(nombre=nombreMapa):
            raise forms.ValidationError(u"Nombre de mapa ya existente")
        return nombreMapa


"""Formulario para la creación de un pais en el mapa"""
class NewCountryForm(forms.Form):
    nombrePais = forms.CharField(max_length=30)
    continente = forms.CharField(max_length=30)
    pos_x = forms.IntegerField(max_value=800, min_value=0)
    pos_y = forms.IntegerField(max_value=470, min_value=0)

    def clean_nombrePais(self):
        nombrePais = self.cleaned_data.get("nombrePais", "")
        # unicidad...
        if nombrePais is "":
            raise forms.ValidationError(u"Nombre de pais no válido")
        return nombrePais

    def clean_continente(self):
        continente = self.cleaned_data.get("continente", "")
        if continente is "":
            raise forms.ValidationError(u"Nombre de continente no válido")
        return continente

    def clean_pos_x(self):
        x = self.cleaned_data.get("pos_x", "")
        if (not x) or x < 0 or x > 800:
            raise forms.ValidationError(u"Rango de X fuera del alcance")
        return x

    def clean_pos_y(self):
        y = self.cleaned_data.get("pos_y", "")
        if (not y) or y < 0 or y > 470:
            raise forms.ValidationError(u"Rango de Y fuera del alcance")
        return y


"""Formulario para editar los vecinos de un pais"""
class VecinosForm(forms.Form):
    adyacentes = forms.ModelMultipleChoiceField(queryset = Pais.objects.all(), required=False, widget=CheckboxSelectMultiple)


"""Formulario para unirse a partida"""
class NewUnirseForm(forms.Form):
    partidas = forms.ModelChoiceField(label=u"Selección de Partida", queryset = Partida.objects.filter(estado="Inactiva"), widget=RadioSelect , empty_label=None)
    colorEjercitos = forms.ModelChoiceField(label=u"Color de los Ejércitos", required=True, queryset = Color.objects.all() , empty_label=None)







